iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 3
0
自我挑戰組

M157q 的待業程式生活日誌系列 第 3

[2018 iThome 鐵人賽] Day 3: 用 Python 寫個程式抓出我在 Twitter 上存了哪些 tweet

  • 分享至 

  • xImage
  •  

前言

身為一個邊緣人,
沒有 Instagram 帳號,
卻有台灣沒什麼人用的 Twitter 帳號也是很合理的。

其實 Twitter 上很容易得到國外第一手即時資訊,
常常看到好幾天之後才在 Facebook 或台灣的媒體看到消息,
很適合我這種資訊焦慮症的人(?

Twitter 也很容易跟一些很有名的人直接交流,
像上一篇翻譯文章的授權,
我就是直接在 Twitter 上問作者,
大概五分鐘之內,沒錯,就是短短幾分鐘之內,就收到作者同意的回覆。

總之,
我平常在用 Twitter 的時候有個習慣,
就是把我看到覺得值得保留下來的 tweet 分成兩類,
一類是比較不嚴肅的,把該 tweet 私訊給自己。
另一類是比較嚴肅的,把該 tweet 私訊給另外一個 RSS bot 帳號。
(這個 RSS bot 有機會的話會發篇文章講一下)

這裡要來用 Python 寫個程式,
把今年存下來的這兩大類 tweet 抓出來,
其實我不確定是不是一定會成功,
大概只有 87% 的把握,
總之接下來就一步步講一下要怎麼做。

(謎之音:最愛寫這種無用的小程式了。)


步驟

看有哪個 API 可以拿來用

取得 Access Token

  • https://apps.twitter.com/ 建立一個新的 App。
  • 記下 Consumer Key (API Key) 和 Consumer Secret (API Secret)
  • 點選 Permissions
    • 選取 Read, Write and Access direct messages。(原本只有 Read, Write)
    • 選好之後按底下的 Update Settings
  • 點進去剛建立的 App,移到底下,點選建立 Access Token。
  • 記下 Access Token 和 Access Token Secret

安裝要使用的 Python 套件

撰寫程式

因為兩個的作法類似,
這邊就以抓出比較嚴肅一點的 tweet 作為範例,
幾行就可以寫完了。

#!/usr/bin/env python3

import urllib

import twitter


# Fill these contants by yourself. 
CONSUMER_KEY = ""
CONSUMER_SECRET = ""
ACCESS_TOKEN_KEY = ""
ACCESS_TOKEN_SECRET = ""
MY_TWITTER_ID = 0
MY_BOT_TWITTER_ID = 0


api = twitter.Api(
    consumer_key=CONSUMER_KEY,
    consumer_secret=CONSUMER_SECRET,
    access_token_key=ACCESS_TOKEN_KEY,
    access_token_secret=ACCESS_TOKEN_SECRET,
)

# Twitter API limitation:
# "Last 30 days DMs" or "Up to 200 DMs which created before 30 days"
sent_direct_messages = api.GetSentDirectMessages(count=200)
for dm in sent_direct_messages:
    if dm.recipient_id == MY_BOT_TWITTER_ID:
        try:
            # Got t.co url in DM, use urllib to get its real Twitter Status URL.
            with urllib.request.urlopen(dm.text) as response:
                real_url = response.geturl()
        except Exception:
            raise
        else:
            print("+ <{}>".format(real_url))

開一個 gist 放個程式碼:https://gist.github.com/M157q/a90f5d2948442dc482e35d671b074c6f


結果

直接以網址呈現:
(其實應該可以直接 embed tweet 啦,但我有點懶得弄。)


題外話

在寫這篇的時候發現,
最近 Twitter 好像針對這需求有了一個新的 Bookmark 功能
看了一下,好像還不能分類就是,
所以我應該還是會繼續用這樣的方式當作 bookmark。

然後也發現好像多了個 Account Activity API
可以設定 webhook 即時接收帳號的事件,
可能可以做到類似聊天機器人這樣事件觸發式的對話。

如果是這裡的用途的話,
可以在我每次發送私訊的時候,
就直接透過 webhook 把該 tweet 的內容存在資料庫裡,
這樣就不會受 Twitter API 的限制了,
有空的話再來弄吧。


如果覺得我的文章不錯的話,
歡迎按讚、追蹤、訂閱、留言、分享,
也可以利用像是 Feedly 等 RSS Reader,
直接訂閱我的部落格:https://blog.m157q.tw
因為 iThome 這邊未來我不保證持續更新,
雖然目前用起來沒太大問題,
但就是覺得要管兩個地方有點麻煩。


上一篇
[2018 iThome 鐵人賽] Day 2: 《回答的智慧》
下一篇
[2018 iThome 鐵人賽] Day 4: 如何區分加密、壓縮、編碼
系列文
M157q 的待業程式生活日誌31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言